package com.hsnn.medstgmini.base.std.controller;

import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.hsnn.medstgmini.Constants;
import com.hsnn.medstgmini.base.std.model.StdCompinfo;
import com.hsnn.medstgmini.base.std.model.StdCompprofile;
import com.hsnn.medstgmini.base.std.model.form.CompDrugProfileForm;
import com.hsnn.medstgmini.base.std.service.CompDrugProfileManager;
import com.hsnn.medstgmini.exception.MSException;
import com.hsnn.medstgmini.model.Img;
import com.hsnn.medstgmini.model.Status;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.ImgUtil;
import com.hsnn.medstgmini.util.Pagination;

/**
 * @category 企业产品资质管理
 * @author 蔡春龙
 * @date 2015年9月14日
 */
@Controller
@RequestMapping("/compDrugProfile")
public class CompDrugProfileController {

	private static final Logger log = Logger
			.getLogger(CompDrugProfileController.class);

	@Autowired
	private CompDrugProfileManager compDrugProfileManager;

	@Autowired
	private HttpServletRequest request;

	@Autowired
	private HttpSession session;

	/**
	 * @category 获取当前登陆人信息
	 * @author 言科
	 * @date 2015年7月22日 SysUser
	 */
	public SysUser getUser() {
		return (SysUser) session.getAttribute(Constants.USERINFO);
	}

	/**
	 * @category 企业端->基础库->药品资质(药品列表)
	 * @date 2015年9月15日
	 * @return
	 */
	@RequestMapping("/toCompSelfDrugList")
	public String toCompSelfDrugList() {
		return "/base/std/sc/drug/profile/compSelfDrugList";
	}

	/**
	 * @category 企业端->基础库->药品资质
	 * @date 2015年9月14日
	 * @param model
	 * @return
	 */
	@RequestMapping("/toCompSelfDrugProfileList")
	public String toCompSelfDrugProfileList(Model model, String prodId) {
		// 药品资质类型集合
		List<Map<String, String>> typeList = compDrugProfileManager
				.getDrugProfileTypeList();
		// 药品信息
		Map<String, Object> drugInfo = compDrugProfileManager
				.getDrugInfoById(prodId);

		model.addAttribute("prodId", prodId);
		model.addAttribute("drugInfo", drugInfo);
		model.addAttribute("typeList", typeList);
		return "/base/std/sc/drug/profile/compSelfDrugProfileList";
	}

	/**
	 * @category 企业端->基础库->药品资质
	 * @date 2015年9月14日
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/getCompSelfDrugProfileList")
	@ResponseBody
	public Pagination getCompSelfDrugProfileList(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			StdCompinfo compInfo = getUser().getInfo();
			if (compInfo != null) {
				form.setCompId(compInfo.getCompId());
			}
			page.setForm(form);
			compDrugProfileManager.getCompProfileList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 企业保存药品资质
	 * @date 2015年9月15日
	 * @param form
	 * @param profile
	 * @return
	 */
	//@RequestMapping("/saveSelfDrugProfile")
	@RequestMapping(value={"/addSC","/editSC"})
	@ResponseBody
	public Pagination saveSelfDrugProfile(CompDrugProfileForm form,
			MultipartFile profile) {
		Pagination page = new Pagination(request);
		try {
			StdCompinfo compInfo = getUser().getInfo();
			if (compInfo != null) {
				form.setCompId(compInfo.getCompId());
			}
			if (profile != null) {
				Img img = ImgUtil.uploadProfile(profile);
				form.setProfilePicAddr(img.getPath());
				form.setProfilePicShortcutAddr(img.getPath());
			}
			form.setAuditStatus(3);
			form.setUpdUser(getUser().getId());
			compDrugProfileManager.saveSelfDrugProfile(form);
			page.setSuccess(true);
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	
	/**
	 * @category 提交资质
	 * @date 2015年9月15日
	 * @param form
	 * @return
	 */
	@RequestMapping("/submitCompProfile")
	@ResponseBody
	public Pagination submitCompProfile() {
		Pagination page = new Pagination(request);
		String array = request.getParameter("array");
		try {
			if (StringUtils.isNotBlank(array)) {
				Gson gson = new Gson();
				Type type = new TypeToken<List<CompDrugProfileForm>>() {
				}.getType();
				List<CompDrugProfileForm> list = gson.fromJson(array, type);
				if (list != null && list.size()>0) {
					for(CompDrugProfileForm form:list){
						form.setUpdUser(getUser().getId());
						compDrugProfileManager.submitCompProfile(form);
						page.setSuccess(true);
					}
				}else{
					page.setSuccess(false);
					return page;
				}
			} else{
				page.setSuccess(false);
				return page;
			}
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质查看(药品列表)
	 * @date 2015年9月15日
	 * @return
	 */
	@RequestMapping("/toCompDrugList")
	public String toCompDrugList() {
		return "/base/std/zx/drug/profile/compDrugList";
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质查看(资质列表)
	 * @date 2015年9月14日
	 * @param model
	 * @return
	 */
	@RequestMapping("/toCompDrugProfileList")
	public String toCompDrugProfileList(Model model, String prodId,
			String compId) {
		// 药品资质类型集合
		List<Map<String, String>> typeList = compDrugProfileManager
				.getDrugProfileTypeList();
		// 药品信息
		Map<String, Object> drugInfo = compDrugProfileManager
				.getDrugInfoById(prodId);

		model.addAttribute("prodId", prodId);
		model.addAttribute("compId", compId);
		model.addAttribute("drugInfo", drugInfo);
		model.addAttribute("typeList", typeList);
		return "/base/std/zx/drug/profile/compDrugProfileList";
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质查看->资质管理(资质列表)
	 * @date 2015年9月14日
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/getCompDrugProfileList")
	@ResponseBody
	public Pagination getCompDrugProfileList(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			compDrugProfileManager.getCompProfileList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 企业保存药品资质
	 * @date 2015年9月15日
	 * @param form
	 * @param profile
	 * @return
	 */
	@RequestMapping("/saveDrugProfile")
	@ResponseBody
	public Pagination saveDrugProfile(CompDrugProfileForm form,
			MultipartFile profile) {
		Pagination page = new Pagination(request);
		try {
			if (profile != null) {
				Img img = ImgUtil.uploadProfile(profile);
				form.setProfilePicAddr(img.getPath());
				form.setProfilePicShortcutAddr(img.getPath());
			}
			form.setAuditStatus(0);
			form.setUpdUser(getUser().getId());
			compDrugProfileManager.saveSelfDrugProfile(form);
			page.setSuccess(true);
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}
	
	/**
	 * @category 中心端保存药品资质
	 * @date 2015年9月15日
	 * @param form
	 * @param profile
	 * @return
	 */
	@RequestMapping(value={"/add","/edit"})
	@ResponseBody
	public Pagination saveDrugProfileCenter(CompDrugProfileForm form,
			MultipartFile profile) {
		Pagination page = new Pagination(request);
		try {
			if (profile != null) {
				Img img = ImgUtil.uploadProfile(profile);
				form.setProfilePicAddr(img.getPath());
				form.setProfilePicShortcutAddr(img.getPath());
			}
			form.setAuditStatus(0);
			form.setUpdUser(getUser().getId());
			compDrugProfileManager.saveSelfDrugProfile(form);
			page.setSuccess(true);
		} catch (MSException e) {
			log.error("",e);
			page.setSuccess(false);
			page.setMsg(e.getMsg());
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心->基础库->药品资质库->资质查看->资质管理->启用
	 * @date 2015年9月9日
	 * @param page
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/enabled")
	@ResponseBody
	public Pagination enabled(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			form.setStatus(Status.enabled.getKey());
			form.setUpdUser(getUser().getId());
			compDrugProfileManager.changeStatus(form);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心->基础库->药品资质库->资质查看->资质管理->停用
	 * @date 2015年9月9日
	 * @param page
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/disabled")
	@ResponseBody
	public Pagination disabled(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			form.setStatus(Status.invalid.getKey());
			form.setUpdUser(getUser().getId());
			compDrugProfileManager.changeStatus(form);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质审核(药品列表)
	 * @date 2015年9月15日
	 * @return
	 */
	@RequestMapping("/toAuditCompDrugList")
	public String toAuditCompDrugList() {
		return "/base/std/zx/drug/profile/auditCompDrugList";
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质审核(有资质需要审核的药品列表)
	 * @date 2015年9月15日
	 * @return
	 */
	@RequestMapping("/getAuditCompDrugList")
	@ResponseBody
	public Pagination getAuditCompDrugList(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			page.setForm(form);
			compDrugProfileManager.getAuditCompDrugList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质审核(资质列表)
	 * @date 2015年9月14日
	 * @param model
	 * @return
	 */
	@RequestMapping("/toAuditDrugProfileList")
	public String toAuditDrugProfileList(Model model, String prodId,
			String compId) {
		// 药品资质类型集合
		List<Map<String, String>> typeList = compDrugProfileManager
				.getDrugProfileTypeList();
		// 药品信息
		Map<String, Object> drugInfo = compDrugProfileManager
				.getDrugInfoById(prodId);

		model.addAttribute("prodId", prodId);
		model.addAttribute("compId", compId);
		model.addAttribute("drugInfo", drugInfo);
		model.addAttribute("typeList", typeList);
		return "/base/std/zx/drug/profile/auditDrugProfileList";
	}

	/**
	 * @category 中心端->基础库->药品资质库->资质审核->审核(资质列表)
	 * @date 2015年9月14日
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/getAuditDrugProfileList")
	@ResponseBody
	public Pagination getAuditDrugProfileList(CompDrugProfileForm form) {
		Pagination page = new Pagination(request);
		try {
			form.setAuditStatus(0);
			page.setForm(form);
			compDrugProfileManager.getCompProfileList(page);
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心->基础库->药品资质库->资质审核->资质列表->审核通过
	 * @date 2015年9月9日
	 * @param page
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/approve")
	@ResponseBody
	public Pagination approve(StdCompprofile compProfile) {
		Pagination page = new Pagination(request);
		try {
			compProfile.setStatus(Status.enabled.getKey());
			compProfile.setAuditStatus(1);
			compDrugProfileManager.auditCompProfile(compProfile, getUser());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

	/**
	 * @category 中心->基础库->药品资质库->资质审核->资质列表->审核不通过
	 * @date 2015年9月9日
	 * @param page
	 * @param compProfile
	 * @return
	 */
	@RequestMapping("/unapprove")
	@ResponseBody
	public Pagination unapprove(StdCompprofile compProfile) {
		Pagination page = new Pagination(request);
		try {
			compProfile.setStatus(Status.invalid.getKey());
			compProfile.setAuditStatus(2);
			compDrugProfileManager.auditCompProfile(compProfile, getUser());
			page.setSuccess(true);
		} catch (Exception e) {
			log.error("",e);
			page.setSuccess(false);
		}
		return page;
	}

}
